"""
股票信息
"""
from datetime import datetime, date, time
from sqlmodel import Field
from timescaledb import TimescaleModel
from pydantic import BaseModel, ConfigDict

"""
股票信息
"""
class StockInfo(BaseModel):
    code : str # 股票代码
    name : str # 股票名称


"""
成分股
"""
class StockIndex(BaseModel):
    index : str
    code : str
    name : str
    date : datetime


"""
单个股票的行情数据
"""
class StockPrice(TimescaleModel,  table=True):
    code : str = Field(primary_key=True) # 股票代码
    date : datetime = Field(primary_key=True)# 日期
    open : float # 开盘价
    close : float # 收盘价
    high : float # 最高价
    low : float # 最低价
    volume : float # 成交量
    amount : float # 成交额
    amplitude : float # 振幅
    price_change_percentage : float # 涨跌幅
    price_change : float # 涨跌额
    turnover_rate : float # 换手率
    weekday : int # 星期

    # Timescale 特有属性
    __timescale_time_column__ = "date"  # 指定时间列（如果你的 TimescaleModel 有处理逻辑）
    __chunk_time_interval__ = "INTERVAL 1 day"       # 按天分块
    __drop_after__ = "INTERVAL 6 months"  # 例如保留最近3年数据


"""
单个股票的分时数据
"""
class StockHist(BaseModel):
    date_time : datetime
    code : str
    date : date
    time : time
    news : float
    open : float
    close : float
    high : float
    low : float
    price_change_percentage : float # 涨跌幅
    price_change : float # 涨跌额
    volume : float # 成交量
    amount : float # 成交额
    amplitude : float # 振幅
    turnover_rate : float # 换手率

    model_config = ConfigDict(arbitrary_types_allowed=True)

"""
股票实时行情
"""
class StockBid(BaseModel):
    code: str
    sell_5: float
    sell_5_vol: float
    sell_4: float
    sell_4_vol: float
    sell_3: float
    sell_3_vol: float
    sell_2: float
    sell_2_vol: float
    sell_1: float
    sell_1_vol: float
    buy_1: float
    buy_1_vol: float
    buy_2: float
    buy_2_vol: float
    buy_3: float
    buy_3_vol: float
    buy_4: float
    buy_4_vol: float
    buy_5: float
    buy_5_vol: float
    news: float # 最新
    average_price: float # 均价
    raise_rate: float # 涨幅
    raise_fall: float # 涨跌
    total_price: float # 总手
    amount: float # 金额
    turnover: float # 换手
    quantity_ratio: float # 量比
    high: float # 最高
    low: float # 最低
    today_open: float # 今开
    yesterday_close: float # 昨收
    limit_up: float # 涨停
    limit_down: float # 跌停
    external: float # 外盘
    inner: float # 内盘

"""
单个股票的筹码数据
"""
class StockChip(TimescaleModel,  table=True):
    code : str = Field(primary_key=True) # 股票代码
    date : datetime = Field(primary_key=True) # 日期
    close : float # 收盘价
    profit_rate : float # 获利比例
    avg : float # 平均成本
    cost_90_L : float # 90成本-低
    cost_90_H : float # 90成本-高
    concentration_90 : float # 90集中度
    cost_70_L : float # 70成本-低
    cost_70_H : float # 70成本-高
    concentration_70 : float # 70集中度

    # Timescale 特有属性
    __timescale_time_column__ = "date"  # 指定时间列（如果你的 TimescaleModel 有处理逻辑）
    __chunk_time_interval__ = "INTERVAL 1 day"       # 按天分块
    __drop_after__ = "INTERVAL 6 months"  # 例如保留最近6个月数据